package ar.edu.unrn.lia.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;

import ar.edu.unrn.lia.model.AlquilerCuota.CoutaEstado;

@Entity
@Table(name = "cuota_preingreso")
public class CuotaPreIngreso extends BaseEntity implements Serializable,Comparable<CuotaPreIngreso> {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2790540000676308385L;

	
	public CuotaPreIngreso() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	
	
	public CuotaPreIngreso(Concepto concepto, 
			Double monto,
			Alquiler alquiler,
			Date fechaVencimiento, Integer prioridadDePago) {
		super();
		this.concepto = concepto;		
		this.monto = monto;		
		this.alquiler = alquiler;
		this.fechaVencimiento = fechaVencimiento;
		this.prioridadDePago = prioridadDePago;
	}



	public enum Concepto {
		D("Deposito"), C("Comision"), S("Sellado Rentas"), A("Ajuste Inicio Alquiler"), PA("Cuota Alquiler");

		private String concepto;

		private Concepto(String concepto) {
			this.concepto = concepto;
		}

		@Override
		public String toString() {
			return concepto;
		}
	}

	private Concepto concepto;

	private CoutaEstado estado = CoutaEstado.PE;

	private Double monto;

	private Double montoPagado = 0.0;

	private Date fechaPago;

	private Alquiler alquiler;

	private Date fechaVencimiento;

	private Integer prioridadDePago;

	@ManyToOne
	@JoinColumn(name = "alquiler_id", nullable = false)
	@NotNull(message = "{name.notnull}")
	public Alquiler getAlquiler() {
		return alquiler;
	}

	public void setAlquiler(Alquiler alquiler) {
		this.alquiler = alquiler;
	}

	@NotNull(message = "{name.notnull}")
	@Enumerated(EnumType.STRING)
	public CoutaEstado getEstado() {
		return estado;
	}

	public void setEstado(CoutaEstado estado) {
		this.estado = estado;
	}

	@Temporal(TemporalType.DATE)
	public Date getFechaPago() {
		return fechaPago;
	}

	public void setFechaPago(Date fechaPago) {
		this.fechaPago = fechaPago;
	}

	@NotNull(message = "{name.notnull}")
	@Enumerated(EnumType.STRING)
	public Concepto getConcepto() {
		return concepto;
	}

	public void setConcepto(Concepto concepto) {
		this.concepto = concepto;
	}

	@NotNull(message = "{name.notnull}")
	public Double getMonto() {
		return monto;
	}

	public void setMonto(Double monto) {
		this.monto = monto;
	}

	public Double getMontoPagado() {
		return montoPagado;
	}

	public void setMontoPagado(Double montoPagado) {
		this.montoPagado = montoPagado;
	}

	@Temporal(TemporalType.DATE)
	@NotNull(message = "{name.notnull}")
	public Date getFechaVencimiento() {
		return fechaVencimiento;
	}

	public void setFechaVencimiento(Date fechaVencimiento) {
		this.fechaVencimiento = fechaVencimiento;
	}
	
	
	
	public Integer getPrioridadDePago() {
		return prioridadDePago;
	}



	public void setPrioridadDePago(Integer prioridadDePago) {
		this.prioridadDePago = prioridadDePago;
	}



	public Double montoDeuda()
	{
		Double resultado = 0D;
		if (!getEstado().equals(CoutaEstado.PT))
		{
				resultado = getMonto() - getMontoPagado();
		}
		return resultado;
	}
	
	public String color() {
		if (getEstado().equals(CoutaEstado.PT))
			return "grid-cuota-pt";
		else if (getEstado().equals(CoutaEstado.PP))
			return "grid-cuota-pp";
		else
			return "grid-cuota-alerta";		
	}
	
	
	
	@Override
	public int compareTo(CuotaPreIngreso o) {
		return this.prioridadDePago -  o.getPrioridadDePago();
 
	}
	

}
